package com.ruoyi.electronicFence.service;

import java.util.List;

import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.electronicFence.domain.TEfEquipmentDevice;
import com.ruoyi.electronicFence.domain.TEfEquipmentDeviceVo;
import com.ruoyi.electronicFence.domain.TEfEquipmentStatusVo;

/**
 * 设备或场景与监测设备关联  Service接口
 *
 * @author sxygsj
 * @date 2024-05-29
 */
public interface ITEfEquipmentDeviceService
{
    /**
     * 查询设备或场景与监测设备关联
     *
     * @param id 设备或场景与监测设备关联  主键
     * @return 设备或场景与监测设备关联
     */
    public TEfEquipmentDevice selectTEfEquipmentDeviceById(Long id);

    /**
     * 查询设备或场景与监测设备关联
     *
     * @param id 设备或场景与监测设备关联  主键
     * @return 设备或场景与监测设备关联
     */
    public TEfEquipmentDevice selectTEfEquipmentDeviceDetailsListById(Long id);


    /**
     * 查询设备或场景与监测设备关联
     *
     * @param id 设备或场景与监测设备关联  主键
     * @return 设备或场景与监测设备关联
     */
    public TEfEquipmentDevice selectTEfEquipmentDeviceByDeviceId(String deviceId);

    /**
     * 查询设备或场景与监测设备关联  列表
     *
     * @param tEfEquipmentDevice 设备或场景与监测设备关联
     * @return 设备或场景与监测设备关联  集合
     */
    public List<TEfEquipmentDevice> selectTEfEquipmentDeviceList(TEfEquipmentDevice tEfEquipmentDevice);

    /**
     * 查询设备或场景与监测设备关联  列表
     *
     * @param tEfEquipmentDevice 设备或场景与监测设备关联
     * @return 设备或场景与监测设备关联  集合
     */
    public List<TEfEquipmentDeviceVo> selectTEfEquipmentDeviceDetailsList(TEfEquipmentDevice tEfEquipmentDevice);


    /**
     * 查询设备或场景与监测设备关联  列表
     *
     * @param tEfEquipmentDevice 设备或场景与监测设备关联
     * @return 设备或场景与监测设备关联  集合
     */
    public List<TEfEquipmentDeviceVo> selectTEfEquipmentDeviceDetailsListV2(TEfEquipmentDevice tEfEquipmentDevice);

    /**
     * 新增设备或场景与监测设备关联
     *
     * @param tEfEquipmentDevice 设备或场景与监测设备关联
     * @return 结果
     */
    public int insertTEfEquipmentDevice(TEfEquipmentDevice tEfEquipmentDevice);


    /**
     * 新增设备或场景与监测设备关联
     *
     * @param tEfEquipmentDevice 设备或场景与监测设备关联
     * @return 结果
     */
    public AjaxResult insertEquipmentMonitorDevice(TEfEquipmentDevice tEfEquipmentDevice);

    /**
     * 修改设备或场景与监测设备关联
     *
     * @param tEfEquipmentDevice 设备或场景与监测设备关联
     * @return 结果
     */
    public int updateTEfEquipmentDevice(TEfEquipmentDevice tEfEquipmentDevice);

    /**
     * 修改设备或场景与监测设备关联
     *
     * @param tEfEquipmentDevice 设备或场景与监测设备关联
     * @return 结果
     */
    public AjaxResult updateTEfEquipmentDeviceV2(TEfEquipmentDevice tEfEquipmentDevice);

    /**
     * 修改设备或场景与监测设备关联
     *
     * @param tEfEquipmentDevice 设备或场景与监测设备关联
     * @return 结果
     */
    public AjaxResult updateTEfEquipmentDeviceV3(TEfEquipmentDevice tEfEquipmentDevice);

    /**
     * 批量删除设备或场景与监测设备关联
     *
     * @param ids 需要删除的设备或场景与监测设备关联  主键集合
     * @return 结果
     */
    public int deleteTEfEquipmentDeviceByIds(Long[] ids);

    /**
     * 删除设备或场景与监测设备关联  信息
     *
     * @param id 设备或场景与监测设备关联  主键
     * @return 结果
     */
    public int deleteTEfEquipmentDeviceById(Long id);



    /**
     * 查询设备或场景与监测设备关联  列表
     *
     * @param tEfEquipmentDevice 设备或场景与监测设备关联
     * @return 设备或场景与监测设备关联  集合
     */
    public List<TEfEquipmentStatusVo> getEquipmentStatus();

    public List<TEfEquipmentDevice> getEquipmentStatus2();

    /**
     * 获取所有设备的状态信息，并根据最近的历史记录更新其在线/离线状态。
     *
     * 此方法首先获取所有设备的基础信息，然后通过查询每个设备的最新历史状态记录，
     * 判断设备是否在最近5分钟内有活动。如果有，则更新设备状态；如果没有，则标记为离线。
     *
     * @return 返回设备列表，每个设备带有最新的状态信息。
     */
    public List<TEfEquipmentDeviceVo> getEquipmentStatusV3(TEfEquipmentDevice tEfEquipmentDevice);

    /**
     * 修改场所的历史信息
     *
     * @param tEfEquipmentDevice 设备或场景与监测设备关联
     * @return 结果
     */
    public int updateHistoryTEfEquipmentStatus(TEfEquipmentDevice tEfEquipmentDevice);

}
